Шаг 3. Возвращаем определённое состояние файла
Определённое состояние файла — это состояние, которое было на момент создания коммита.
Допустим, вы добавили на страницу заголовок второго уровня и сделали новый коммит. Это уже будет считаться новым состоянием файла, а старым состоянием считается прошлый коммит, который был сделан до нового.
На момент создания прошлого коммита у нас не было заголовка второго уровня, поэтому, если мы вернём состояние файла на момент создания прошлого коммита, заголовок исчезнет. Однако коммит, который мы делали после добавления заголовка, всё равно останется.
Таким образом, мы лишь отменяем изменения в файле. А раз коммит не удаляется, файл сначала получит статус «Модифицированный», а затем автоматически добавится в индекс. Нам придётся либо зафиксировать это изменение, либо вернуть всё как было, то есть восстановить удалённый заголовок.
Теперь перейдём к практике.
Выведем последние два коммита, а также файлы, которые мы меняли. Используем для этого команду git log --oneline -2 --name-only.
Зачем это нужно: чтобы откатить состояние файла index.html к прошлому коммиту — когда ещё не был добавлен неупорядоченный список. Указывать последний сделанный коммит 2dd37fe бессмысленно, мы и так находимся в новом состоянии.
Пропишем команду, которая откатит файл index.html к прошлому коммиту — git checkout 195dfb0 index.html. Если мы не укажем файл после хэша коммита, то просто переключимся на этот коммит и перейдём в состояние detached HEAD.
Неупорядоченный список с вложенным элементом <li> исчез. Введём команду git status, чтобы посмотреть, в каком состоянии находится файл index.html.
Мы видим, что файл добавлен в индекс.
Как мы уже говорили, есть два варианта:
- зафиксировать изменение, создав новый коммит:
- вернуть назад удалённый неупорядоченный список.
Обычно после возврата в какое-то состояние создают новый коммит, но мы так делать не будем, просто возвратим удалённый неупорядоченный список. Перед этим выведем два последних коммита и убедимся, что последний коммит (в котором добавлен список) не удалён.
Для этого воспользуемся командой git log --oneline -2.
Коммит с добавлением списка не удалён, то есть всё прошло успешно.
Теперь вернём список с помощью команды git reset --hard. Напомним, эта команда отменяет изменения, даже если они добавлены в индекс. Если бы мы использовали git restore, то нам бы пришлось прописать две команды, а не одну.
Неупорядоченный список вернулся на своё место. Git нас также уведомил о том, что HEAD указывает на коммит с хэшем 2dd37fe, в котором содержится добавление неупорядоченного списка.
Важный момент: если после указываемого коммита будет несколько коммитов, то они все будут отменены. «Пачку» коммитов можно вернуть, использовав команду git reset --hard.